package com.swf.seed.jolt;

/**
 * <p>Title: IJoltData</p>
 * <p>Description: 统一的Jolt交互数据基本操作的接口，长连接，短连接的交互数据实现这个接口</p>
 * <p>Copyright: Copyright (c) 2009</p>
 * <p>Company: Beijing Watchdata CO,.Ltd</p>
 * @author da.wang
 * @version 1.0
 */
public interface IJoltData {

    public void setServiceName( String serviceName );

    public String getServiceName();

    /**
     * 设置或修改缓冲区中Byte类型的值
     * @param name String 参数名称
     * @param val byte 值
     */
    void setByte( String name, byte val );

    /**
     * 设置或修改缓冲区中Byte类型的值
     * @param name String 参数名称
     * @param itemNo int 条目索引
     * @param val byte 值
     */
    void setByteItem( String name, int itemNo, byte val );

    /**
     * 设置或修改缓冲区中Byte数组类型的值.
     * @param name String 参数名称
     * @param val byte[] 值
     * @param len 长度
     */
    void setBytes( String name, byte[] val, int len );

    /**
     * 设置或修改缓冲区中Byte数组类型的值
     * @param name String 参数名称
     * @param itemNo int 条目索引
     * @param val byte[] 值
     * @param len int 长度
     */
    void setBytesItem( String name, int itemNo, byte[] val, int len );

    /**
     * 设置或修改缓冲区中double类型的值
     * @param name String 参数名称
     * @param val double 值
     */
    void setDouble( String name, double val );

    /**
     * 设置或修改缓冲区中double类型的值
     * @param name String 参数名称
     * @param itemNo int 条目索引
     * @param val double 值
     */
    void setDoubleItem( String name, int itemNo, double val );

    /**
     * 设置或修改缓冲区中float类型的值.
     * @param name String 参数名称
     * @param val float 值
     */
    void setFloat( String name, float val );

    /**
     * 设置或修改缓冲区中float类型的值
     * @param name String 参数名称
     * @param itemNo int 条目索引
     * @param val float 值
     */
    void setFloatItem( String name, int itemNo, float val );

    /**
     * 设置或修改缓冲区中int类型的值.
     * @param name String 参数名称
     * @param val int 值
     */
    void setInt( String name, int val );

    /**
     * 设置或修改缓冲区中int类型的值
     * @param name String 参数类型
     * @param itemNo int 条目索引
     * @param val int 值
     */
    void setIntItem( String name, int itemNo, int val );

    /**
     * 设置或修改缓冲区中Short类型的值.
     * @param name String 参数名称
     * @param val short 值
     */
    void setShort( String name, short val );

    /**
     * 设置或修改缓冲区中short类型的值
     * @param name String 参数名称
     * @param itemNo int 条目索引
     * @param val short 值
     */
    void setShortItem( String name, int itemNo, short val );

    /**
     * 设置或修改缓冲区中String类型的值.
     * @param name String 参数名称
     * @param val String 值
     */
    void setString( String name, String val );

    /**
     * 设置或修改缓冲区中字符串类型数据
     * @param name String 参数名
     * @param itemNo int 条目索引
     * @param val String 参数值
     */
    void setStringItem( String name, int itemNo, String val );

    /**
     * 返回数据,数据类型有其子类决定
     * @return Object 长连接会返回Result对象，短连接会返回JoltMessage对象。
     */
    Object getData();

    /**
     * 填充数据，由子类来赋值
     * @param obj Object
     */
    void setData( Object obj );

    /**
     * 得到缓存中参数的个数
     * @param sParamName String 参数名
     * @return int 参数个数
     */
    int getOccurrenceCount( String sParamName );

    /**
     * 从缓冲区中获取byte类型的值
     * @param name String 参数名称
     * @param def byte 默认值
     * @return byte 获取到的值
     */
    byte getByteDef( String name, byte def );

    /**
     * 从缓冲区中获取byte类型的值
     * @param name String 参数名称
     * @param itemNo int 索引
     * @param def byte 默认值
     * @return byte 获取到的值
     */
    byte getByteItemDef( String name, int itemNo, byte def );

    /**
     * 从缓冲区中获取byte数组类型的值
     * @param name String 参数类型
     * @param def byte[] 默认值
     * @return byte[] 获取到的值
     */
    byte[] getBytesDef( String name, byte[] def );

    /**
     * 从缓冲区中获取Byte数组类型的值
     * @param name String 参数名称
     * @param itemNo int 索引
     * @param def byte[] 默认值
     * @return byte[] 获取到的值
     */
    byte[] getBytesItemDef( String name, int itemNo, byte[] def );

    /**
     * 从缓冲区中获取double类型的值
     * @param name String 参数名称
     * @param def double 默认值
     * @return double 获取到的值
     */
    double getDoubleDef( String name, double def );

    /**
     * 从缓冲区中获取double类型的值
     * @param name String 参数名称
     * @param itemNo int 索引
     * @param def double 默认值
     * @return double 获取到的值
     */
    double getDoubleItemDef( String name, int itemNo, double def );

    /**
     * 从缓冲区中获取float类型的值
     * @param name String 参数名称
     * @param def float 默认值
     * @return float 获取到的值
     */
    float getFloatDef( String name, float def );

    /**
     * 从缓冲区中获取float类型的值
     * @param name String 参数名称
     * @param itemNo int 索引
     * @param def float 默认值
     * @return float 获取到的值
     */
    float getFloatItemDef( String name, int itemNo, float def );

    /**
     * 从缓冲区中获取int类型的值
     * @param name String 参数名称
     * @param def int 默认值
     * @return int 获取到的值
     */
    int getIntDef( String name, int def );

    /**
     * 从缓冲区中获取int类型的值
     * @param name String 参数名称
     * @param itemNo int 索引
     * @param def int 默认值
     * @return int 获取到的值
     */
    int getIntItemDef( String name, int itemNo, int def );

    /**
     * 从缓冲区中获取short类型的值
     * @param name String 参数名称
     * @param def short 默认值
     * @return short 获取的值
     */
    short getShortDef( String name, short def );

    /**
     * 从缓冲区中获取short类型的值
     * @param name String 参数名称
     * @param itemNo int 索引
     * @param def short 默认值
     * @return short 获取的值
     */
    short getShortItemDef( String name, int itemNo, short def );

    /**
     * 从缓冲区中获取String类型的值
     * @param name String 参数名称
     * @param def String 默认值
     * @return String 获取到的值
     */
    String getStringDef( String name, String def );

    /**
     * 从缓冲区中获取String类型的值
     * @param name String 参数名称
     * @param itemNo int 索引
     * @param def String 默认值
     * @return String 获取到的值
     */
    String getStringItemDef( String name, int itemNo, String def );

    /**
     * 释放资源，在操作完以后，必须调用该方法来进行清理操作
     */
    public void destroy();

}
